package alvarodelrosal.chat.client.gui;

import alvarodelrosal.chat.client.modelo.Connection;
import java.awt.Dimension;
import java.awt.HeadlessException;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class VentanaDeConexion extends Ventana {

    private JFrame ventanaDeConexion;
    private JTextField campoHost;
    private JTextField campoPuerto;

    public VentanaDeConexion() {
        ventanaDeConexion = null;
    }

    public void crear() {
        if (laVentanaNoExiste()) {
            ventanaDeConexion = new JFrame();

            parametrosDeVentana();

            JLabel etiquetaHost = crearEtiqueta("Host:", 1);
            ventanaDeConexion.add(etiquetaHost);
            campoHost = crearCampo(1);
            campoHost.setText("localhost");
            ventanaDeConexion.add(campoHost);

            JLabel etiquetaPuerto = crearEtiqueta("Puerto:", 2);
            ventanaDeConexion.add(etiquetaPuerto);
            campoPuerto = crearCampo(2);
            campoPuerto.setText("9999");
            ventanaDeConexion.add(campoPuerto);

            ventanaDeConexion.add(botonDeConectar());

            ventanaDeConexion.add(botonDeSalir());

            ventanaDeConexion.setResizable(false);

        }
        ventanaDeConexion.setVisible(true);
    }

    private JButton botonDeConectar() {
        ImageIcon iconoCandado = new ImageIcon(getClass().getResource("/iconos/lock.png"));

        JButton conectar = new JButton("Conectar", iconoCandado);
        conectar.setBounds(170, 160, 100, 30);
        ventanaDeConexion.getRootPane().setDefaultButton(conectar);
        conectar.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {

                Connection connection = new Connection(campoHost.getText(),
                        Integer.parseInt(campoPuerto.getText()));
                connection.start();
                
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        new VentanaDeLogin().crear();
                        ventanaDeConexion.setVisible(false);
                    }
                });

            }
        });
        return conectar;
    }

    private JButton botonDeSalir() {
        ImageIcon iconoSalir = new ImageIcon(getClass().getResource("/iconos/door-open.png"));

        JButton salir = new JButton("Salir", iconoSalir);
        salir.setBounds(60, 160, 100, 30);
        salir.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent event) {
                System.exit(0);
            }
        });
        return salir;
    }

    private boolean laVentanaNoExiste() {
        return ventanaDeConexion == null;
    }

    private void parametrosDeVentana() throws HeadlessException {
        ventanaDeConexion.setTitle("Datos de conexión");
        ventanaDeConexion.setSize(340, 230);
        ventanaDeConexion.setResizable(false);

        Toolkit toolkit = ventanaDeConexion.getToolkit();
        Dimension size = toolkit.getScreenSize();
        ventanaDeConexion.setLocation((size.width - ventanaDeConexion.getWidth()) / 2,
                (size.height - ventanaDeConexion.getHeight()) / 2);
        ventanaDeConexion.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        ventanaDeConexion.setLayout(null);
    }

    private JLabel crearEtiqueta(String nombre, int posicion) {
        JLabel etiqueta = new JLabel(nombre);
        etiqueta.setBounds(20, 10 + 30 * posicion, 130, 30);
        etiqueta.setHorizontalAlignment(JLabel.RIGHT);
        return etiqueta;
    }

    private JTextField crearCampo(int posicion) {
        JTextField campo = new JTextField();
        campo.setBounds(170, 10 + 30 * posicion, 150, 30);
        return campo;
    }

    private JPasswordField crearCampoClave(int posicion) {
        JPasswordField campo = new JPasswordField();
        campo.setBounds(170, 10 + 30 * posicion, 150, 30);
        return campo;
    }
}
